/**
 * 对于出现有多个请求会同时出现的可能，多次请求刷新token 显得不太符合需求
 * 因此，使用promise 拦截，等待当前promise 完床后，共用这一个 refreshToken, 其他请求无需重复请求 
 * 
 * 其他：如多标签页，刷新token 如何跨标签页实现，可根据实际需求进行开发
 * */ 

import request from './request';
import { getRefreshToken } from './token';

let promise;
export async function refreshToken() {
  
  if (promise) {
    return promise;
  }
  promise = new Promise(async resolve => {
    console.log('刷新token');
    const resp = await request.get('/refresh_token', {
      headers: {
        Authorization: `Bearer ${getRefreshToken()}`
      },
      __isRefreshToken: true, // 添加私有属性，判断请求是否刷新token
    }) 
    resolve(resp.code === 0)
  })
  promise.finally(() => { // promise 不管成功或失败，都得把值清空
    promise = null;
  })
  return promise;
}

// 写在一块，高内聚
export function isRefreshRequest(config) {
  return !!config.__isRefreshToken;
}